package domein;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Calendar;

import utilities.DateHelper;

public class ParkeerPlaats implements Serializable {
	private String type;	
	private double prijs;
	private ArrayList<TimeEntry> timetable;

	/**
	 * Maak een nieuwe parkeerplaats aan, bij het aanmaken staat bezet op false 
	 * @param aPrijs de prijs per uur
	 * @param aType het type van de parkeerplaats
	 */
	public ParkeerPlaats(double aPrijs, String aType) {
		prijs = aPrijs;
		type = aType;
		timetable = new ArrayList<>();
	}
	
	public ArrayList<TimeEntry> getTimeTable(){
		return timetable;
	}
	
	/**
	 * Kijkt of timetable leeg is
	 * @return boolean ja/nee is de lijst leeg?
	 */
	public boolean hasEmptyTimeTable(){
		if(timetable.size() > 0){
			return false;
		}
		return true;
	}
	
	/**
	 * Kijkt of de parkeerplaast bezet is
	 * @return boolean, is de parkeerplaats bezet?
	 */
	public boolean isBezet(Calendar inputStartTijd, Calendar inputEindTijd){	
		if(!hasEmptyTimeTable()){
			for(TimeEntry ie: timetable){
				 if(DateHelper.overlappenDezeDatums(inputStartTijd, inputEindTijd, ie.getStartTijd(), ie.getEindTijd())){
					 return true;
				 }
			}
		}
		return false;
	}
	
	/**
	 * Zet de bezet status van de parkeerplaats
	 * @param s boolean bezet status
	 */
	public void setBezet(Klant aReserveerder, Calendar inputStartTijd, Calendar inputEindTijd){
		if(!isBezet(inputStartTijd, inputEindTijd)){
			timetable.add(new TimeEntry(aReserveerder, inputStartTijd, inputEindTijd));
		}
	}
	
	/**
	 * Verkrijg type van de parkeerplaats
	 * @return type
	 */
	public String getType(){
		return type;
	}
	
	/**	
	 * Verkrijg prijs per uur van de parkeerplaats
	 * @return prijs
	 */
	public double getPrijs() {		
		return prijs;
	}
	
	/**
	 * Verkrijg timeEntry van timetable lijst
	 * @param index
	 * @return timeEntry
	 */
	public TimeEntry getTimeEntry(Integer index){
		return timetable.get(index);
	}

	public void removeTimeEntry(TimeEntry timeEntry) {
		timetable.remove(timeEntry);
		
	}
	
}
